import GameConfig from "../../common/GameConfig";
import Coordinate from "../type/DataStructure";

/**
 * 地图管理
 */
export default class MapManager {
    /** 方格的位置表 */
    private static _posMap: cc.Vec2[][] = null;
    /** 地图宽度 */
    private static width: number = null;
    /** 地图高度 */
    private static height: number = null;

    /**
     * 初始化方格位置
     */
    public static init() {
        MapManager.generatePosMap();
    }

    /**
     * 生成每个方格的位置表
     */
    private static generatePosMap() {
        MapManager._posMap = [];
        // 计算地图宽高
        MapManager.width = (GameConfig.padding * 2) + (GameConfig.size * GameConfig.col) + (GameConfig.spacing * (GameConfig.col - 1));
        MapManager.height = (GameConfig.padding * 2) + (GameConfig.size * GameConfig.row) + (GameConfig.spacing * (GameConfig.row - 1));
        // 以左下角为起点，计算第一个方格的位置
        const beginX = -(MapManager.width / 2) + GameConfig.padding + (GameConfig.size / 2);
        const beginY = -(MapManager.height / 2) + GameConfig.padding + (GameConfig.size / 2);
        // 计算所有方格的位置。
        // 从左到右计算每一列方格的位置
        for (let c = 0; c < GameConfig.col; c++) {
            let colSet = [];
            let x = beginX + c * (GameConfig.spacing + GameConfig.size);
            // 从下往上计算列的每一个方格的位置
            for (let r = 0; r < GameConfig.row; r++) {
                let y = beginY + r * (GameConfig.spacing + GameConfig.size);
                colSet.push(cc.v2(x, y));
            }
            MapManager._posMap.push(colSet);
        }
    }

    /**
     * 获取方格的位置
     */
    public static getPos(x: number | Coordinate, y?: number): cc.Vec2 {
        let pos: cc.Vec2;
        if (typeof x === 'number') {
            pos = MapManager._posMap[x][y];
        } else {
            pos = MapManager._posMap[x.x][x.y];
        }
        return pos;
    }
}
